package com.gosophia.commons.ws;

import java.util.HashMap;
import java.util.Map;

import javax.xml.bind.annotation.adapters.XmlAdapter;
/***
 * 配置一个适配器，用来将查询出map类型的数据进行转换;
 * 
 * 如果需要从WebService中向客户端返回一个map类型的数据，那么需要在自己的工程中定义一个类继承于此类，并将
 * 所定义的类标注在sei所返回map类型数据的方法上。
 * 
 * @author zhao_yanfang
 * 
 */
public class MapAdapter<K, V> extends XmlAdapter<MapXMLHolder<K, V>, Map<K, V>> {

	/**
	 * 将map类型的数据转换为一个类似于map的javaBean
	 */
	@SuppressWarnings("unchecked")
	public MapXMLHolder<K, V> marshal(Map<K, V> v) throws Exception {
		MapXMLHolder<K, V> mapEntys = new MapXMLHolder<K, V>();
		if (v != null && v.size() > 0) {
			int size = v.size();
			mapEntys.setEntries(new MapEnty[size]);
			int i = 0;
			for (Map.Entry<K, V> entry : v.entrySet()) {
				MapEnty<K, V> mapEnty = new MapEnty<K, V>();
				mapEnty.setKey(entry.getKey());
				mapEnty.setValue(entry.getValue());
				mapEntys.getEntries()[i] = mapEnty;
				i++;
			}
		}
		return mapEntys;
	}

	/**
	 * 将一个javaBean转换为一个map
	 */
	public Map<K, V> unmarshal(MapXMLHolder<K, V> v) throws Exception {
		Map<K, V> map = new HashMap<K, V>();
		if (v != null && v.getEntries().length > 0) {
			for (MapEnty<K, V> mapEnty : v.getEntries()) {
				map.put(mapEnty.getKey(), mapEnty.getValue());
			}
		}
		return map;
	}

}
